<?php

/**
 * MicroFramework Bootstrap Script (04.07.2011)
 * by KnKill, 2011
 * version 1.00
 */

// Полный путь к сайту, без слэша на конце
define('SITE', 'http://178.219.94.39/dubz2');

// Имя контроллера по умолчанию (если явно не указан вызываемый контроллер)
define('MAIN_CONTROLLER', 'index');
// Имя метода по умолчанию (если явно не указан вызываемый метод)
define('MAIN_METHOD', 'home');

define('TIME_ZONE', 'Europe/Kiev');

// WebRoot: для пользовательских файлов (css, js, etc.)
define('WR', SITE . '/webroot');
define('CSS', WR . '/css');
define('JS', WR . '/js');
define('IMG', WR . '/images');

define('DS', DIRECTORY_SEPARATOR);
// Эта директория
define('ROOT', dirname(__FILE__));
define('CONTROLLERS', ROOT . DS . 'controllers');
define('MODELS', ROOT . DS . 'models');
define('VIEWS', ROOT . DS . 'views');
define('PLUGINS', ROOT . DS . 'plugins');

// Установите TRUE, чтобы сделать ссылки "человеко-понятными" (ЧПУ).
// Примечание: Не забудьте в случае включения функции насторить .htaccess
// Подробнее в файле readme.txt
define('SEF', false);

// Подгружаем базовые системные функции (url, redirect, error)
require_once ROOT . DS . 'base_functions.php';

setTimeZone(TIME_ZONE);

/**
 * Подгружаем необходимые системные файлы:
 * - Request: Оперирует с GET и POST запросами
 * - Twig: Рендерит страницы сайта
 * - Model: Позволяет использовать и вызывать модели из контроллеров
 * - Plugin: Позволяет использовать плагины, расширяющие возможности фреймворка
 * - Db: Позволяет работать с базой данных
 */
loadSystemFiles('request', 'model', 'plugin', 'db', 'response', 'twig/Autoloader');

// Загружаем настройки подключения к базе данных
$db_configs = require_once ROOT . DS . 'configs' . DS . 'db.cfg.php';

// Подключение к базе данных
Db::Connect(
    $db_configs['host'],
    $db_configs['login'],
    $db_configs['password'],
    $db_configs['database']
);

// Определение контроллера и выполняемого метода
$controller = isset($_GET['c']) ? $_GET['c'] : MAIN_CONTROLLER;
$method     = isset($_GET['m']) ? $_GET['m'] : MAIN_METHOD;

// Запись контроллера и метода в константы
define('CONTROLLER', $controller);
define('METHOD',     $method);

// Загрузка базового контроллера
require_once CONTROLLERS . DS . 'base.php';

// Проверяем доступность указанного контроллера
if (! file_exists(CONTROLLERS . DS . 'c_' . $controller . '.php')) {
    error(404, true);
}

// Загрузка нужного контроллера
require_once CONTROLLERS . DS . 'c_' . $controller . '.php';

// Генерируем имя контроллера
$controllerName = 'Controller_' . $controller;
// Создаем новый экземпляр
$cHandle = new $controllerName;

// Проверяем наличие запрошенного метода. Если искомый метод не найден - 404
if (! method_exists($cHandle, $method)) {
    error(404, true);
}

// Все методы с символом подчёркивания в качестве первого символа - приватные,
// пожтому в случае попытки вызова приватного метода выбрасываем 403
if (substr($method, 0, 1) == '_') {
    error(403, true);
}

// Запускаем на выполнение указанный метод
$cHandle->$method();